package bogus.minigame;

import bogus.core.BogusCore;
import bogus.core.CoreParams;

public interface MinigameBase
	{
    	/**Called when the Minigame is starting.<br>
    	 * <br>  
    	 * The OpenGL context will be available when this is called, and the previous Minigame will have been disposed.*/
	public abstract void init();
	/**Return the global parameters used by this Minigame.*/
	public abstract CoreParams getCoreParams();
	/**Called at the fixed rate defined by {@link #getStepRate()}.<br>
	 * In this method, the implementation should execute a periodic update known as a step.*/
	public abstract void step();
	/**As far as it is possible, this will be called at the rate defined by {@link #getMaxFrameRate()}.<br>
	 * If this is not possible, this method may be skipped in favor of maintaining a constant rate of calls to {@link #step()}.<br>
	 * In this method, the implementation should render graphics to the screen. No game logic must be executed here.*/
	public abstract void render();
	/**Called when a minigame is being removed,<br> 
	 * after ordinary resources has been unloaded,<br> 
	 * and before the {@link #init(BogusCore)} call is dispatched to the next Minigame.*/
	public abstract void dispose();
	}
